package br.com.hs.nfe.common.enumeration;

/**
 * Tipo Tributação do ICMS Normal e ST.
 * @author Ranlive Hrysyk
 */
public enum CSTEnum {

    /**
     * Tributada integralmente
     */
    X_00("00", "00 - Tributada integralmente"),
    /**
     * Tributada com cobrança do ICMS por ST
     */
    X_10("10", "10 - Tributada com cobrança do ICMS por ST"),
    /**
     * Com redução da base de cálculo
     */
    X_20("20", "20 - Com redução da base de cálculo"),
    /**
     * Isenta ou não tributada
     */
    X_30("30", "30 - Isenta ou não tributada e com cobrança do ICMS por ST"),
    /**
     * Isenta
     */
    X_40("40", "40 - Isenta"),
    /**
     * Não tributada
     */
    X_41("41", "41 - Não tributada"),
    /**
     * Suspenção
     */
    X_50("50", "50 - Suspensão"),
    /**
     * Diferimento
     */
    X_51("51", "51 - Diferimento"),
    /**
     * Cobrado anteriormente
     */
    X_60("60", "60 - Cobrado anteriormente por ST"),
    /**
     * Com redução da base calculo
     */
    X_70("70", "70 - Com redução da base de cálculo e cobrança do ICMS por ST"),
    /**
     * Outras
     */
    X_90("90", "90 - Outras"),
    /**
     * Tributada com cobrança do ICMS por ST (com partilha do ICMS)
     */
    X_10_Part("10", "10 - Tributada com cobrança do ICMS por ST (com partilha do ICMS entre a UF de origem e a UF de destino ou a UF definida na legislação)"),
    /**
     * Outras (com partilha do ICMS)
     */
    X_90_Part("90", "90 - Outras (com partilha do ICMS entre a UF de origem e a UF de destino ou a UF definida na legislação)"),
    /**
     * Não tributada (ICMSST devido para a UF de destino)
     */
    X_41_ST("41", "41 - Não tributada (ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do rementente)");
    private String codigo;
    private String descricao;

    private CSTEnum(String codigo, String descricao) {
        this.codigo = codigo;
        this.descricao = descricao;
    }

    /**
     * Descrição.
     */
    public String getDescricao() {
        return this.descricao;
    }

    /**
     * Código.
     */
    public String getCST() {
        return this.codigo;
    }

    @Override
    public String toString() {
        return getDescricao();
    }

    /**
     * Obtém enum pelo código.
     */
    public static CSTEnum getEnumByCodigo(String codigo) {
        for (CSTEnum tipo : values()) {
            if (tipo.getCST().equals(codigo)) {
                return tipo;
            }
        }
        return null;
    }
}
